/**
 * 将X拆成Y个数相乘的形式，顺序有关。
 * 将X拆成质因子连乘积形式 p1^k1 ... pi^ki
 * 本质上就是将ki个pi放入Y个不同的盒子，是球同盒异可空模型
 * 因此每个pi贡献 C(ki+Y-1, Y-1)=C(ki+Y-1,ki) 
 * 连乘起来即可
 * 注意到Y可能很大，但是ki不超过100，可以直接用组合数公式求得
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
using pii = pair<int, int>;
using pll = pair<llt, llt>;

int const SZ = 110;
llt const MOD = 1E9+7;

llt qpow(llt a, llt n){
    llt ret = 1;
    a %= MOD;
    while(n){
        if(n & 1) ret = ret * a % MOD;
        a = a * a % MOD;
        n >>= 1;
    }
    return ret;
}

inline llt inv(llt x){return qpow(x, MOD-2LL);}

vector<llt> Fac, IFac;

llt X, Y;
vector<llt> Vec;

/// 相当于n个同球放入Y个异盒可空
/// C(n+Y-1, Y-1) = C(n+Y-1, n)
llt f(llt n){
    llt ans = IFac[n];
    for(llt i=0,j=n+Y-1;i<n;++i,--j){
        ans = ans * j % MOD;
    }
    return ans;    
}

void work(){
    cin >> X >> Y;
    Vec.clear();
    auto n = X;
    for(llt i=2;i*i<=n;++i){
        if(n % i) continue;
        int t = 0;
        while(0 == n % i){
            n /= i;
            t += 1;
        }
        Vec.emplace_back(t);
    }
    if(n != 1) Vec.emplace_back(1);

    llt ans = 1;
    for(auto i : Vec){
        ans = ans * f(i) % MOD;
    }
    cout << ans << "\n";
    return;
}


int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    Fac.assign(SZ, 0);
    IFac.assign(SZ, 0);
    Fac[0] = Fac[1] = 1;
    for(int i=1;i<SZ;++i) Fac[i] = Fac[i - 1] * i % MOD;
    IFac[SZ - 1] = inv(Fac[SZ - 1]);
    for(int i=SZ-2;i>=0;--i) IFac[i] = IFac[i + 1] * (i + 1) % MOD;
    assert(IFac[0] == 1 and IFac[1] == 1);

    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofkase = 1;
    cin >> nofkase;
    while(nofkase--) work();
    return 0;
}
